package ar.republicagroup.gestion.util.helpers;
import ar.republicagroup.gestion.entities.Caja;
import static ch.lambdaj.Lambda.*;
import ch.lambdaj.function.matcher.LambdaJMatcher;
import ch.lambdaj.group.Group;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.hamcrest.Matchers;

/**
 *
 * @author DIEGOALV
 */
public class FilterCaja {
    
     private static Logger log =  Logger.getLogger(FilterCaja.class);
    
    
     public static LambdaJMatcher<Caja> filterCajaByTipoMovimiento(int movimientoTipoId){
        return having(on(Caja.class).getMovimientoTipoId().getId().intValue(), Matchers.equalTo(movimientoTipoId));
     }
      
      
     public static Map<String,Double> getPagosByCliente(List<Caja> movimientos){
         /* Agrupamos todos los cheques de este cliente para obtener todos los bancos de estos cheques */                                            
        Group<Caja> groupPagosByCliente    = group(movimientos,by(on(Caja.class).getClienteId().getId()));
        Set<String> groupCajaKeys  = groupPagosByCliente.keySet();
        
        /*Map para guardar el total de pagos de un cliente */
        Map<String,Double> clienteTotalPayment = new HashMap<>();
        
        for (String clienteId : groupCajaKeys){
            double totalPayments = 0;
            for( Caja pago : groupPagosByCliente.find( clienteId ) ){
                totalPayments += pago.getImporte().doubleValue();
            }
            clienteTotalPayment.put(clienteId, totalPayments);
        } 

        /* iteramos el Map*/
         log.info("Generando el total de pagos por cliente , para el cierre de caja");
         log.info("Map clienteTotalPayment : "+clienteTotalPayment);
         
        return clienteTotalPayment;
    }
    
    //private  
     
     
     
}
